import axios from 'axios';
import { message } from 'antd';

import { store } from '@/store/store';
import { logout } from '@/store/actions/login';
import { customHistory } from '@/utils';

// 创建 axios 实例并配置导出
export const http = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0',
  // baseURL: 'https://toutiao.itheima.net/v1_0',
  timeout: 10000,
});

// 配置请求拦截器
http.interceptors.request.use((config) => {
  // console.log('xxxxxx', config.headers);
  const token = store.getState().login;
  // 判断请求的url地址是否需要认证,除了获取token的接口不需要加token
  if (!config.url.startsWith('/authorizations')) {
    // 添加token
    config.headers.Authorization = `Bearer ${token}`;
  }
  // console.log('yyyyy', JSON.stringify(config.headers));
  return config;
});

// 配置响应拦截器
http.interceptors.response.use(undefined, (error) => {
  // 判断超时错误
  if (!error.response) {
    // 提示用户
    message.error('网络错误，请稍后再试');

    // 错误响应拦截器，要返回一个包装了error的Promise对象
    return Promise.reject(error);
  }

  // token的过期，或token错误判断
  if (error.response.status === 401) {
    console.log(error);
    // 提示用户
    // message.error('认证失败，请返回登录页重新登录');

    // 提示用户之后，重定向
    message.error('认证失败，请返回登录页重新登录', 1, () => {
      console.log('=====');
      store.dispatch(logout());
      customHistory.push('/login');
      return Promise.reject(error);
    });
  }
});
